package com.msh.service;

import com.msh.entity.OrderCollectEntity;
import com.msh.http.viewModel.SalesInfo;
import com.msh.http.viewModel.SkuCollect;
import com.msh.viewmodel.BarCharCollect;
import com.msh.viewmodel.Pager;
import com.msh.viewmodel.SkuViewModel;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author :zhangchuanfu
 * @Date :2023/2/3
 * @Time :14:13
 * @description : 数据展示：合作商分成汇总、订单统计，商品榜单
 */
public interface ReportService {

    /**
     * 获取合作商分账汇总信息
     * @param pageIndex
     * @param pageSize
     * @param name
     * @param start
     * @param end
     * @return
     */
    Pager<OrderCollectEntity> getPartnerCollect(Long pageIndex, Long pageSize, String name, LocalDate start,LocalDate end);

    /**
     * 获取合作商前12个点位分账数据
     * @param partnerId
     * @return
     */
    List<OrderCollectEntity> getTop12(Integer partnerId);

    /**
     * 合作商点位分账搜索
     * @param pageIndex
     * @param pageSize
     * @param partnerId
     * @param start
     * @param end
     * @return
     */
    Pager<OrderCollectEntity> search(Long pageIndex,Long pageSize,Integer partnerId,String nodeName,LocalDate start,LocalDate end);

    /**
     * 分账数据列表
     * @param partnerId
     * @param nodeName
     * @param start
     * @param end
     * @return
     */
    List<OrderCollectEntity> getList(Integer partnerId,String nodeName,LocalDate start,LocalDate end);

    /**
     * 获取一定日期内合作商收益
     * @param partnerId
     * @param start
     * @param end
     * @return
     */
    BarCharCollect getCollect(Integer partnerId,LocalDate start,LocalDate end);

    /**
     * 获取一定日期内的销售额趋势
     * @param collectType
     * @param start
     * @param end
     * @return
     */
    BarCharCollect getAmountCollect(Integer collectType,LocalDate start,LocalDate end);


    /**
     * 获取一定时间内区域销量
     * @param start
     * @param end
     * @return
     */
    BarCharCollect getCollectByRegion(LocalDate start,LocalDate end);

    /**
     * 获取规定时间内商品热榜前n
     * @param start
     * @param end
     * @return
     */
    List<SkuCollect> getSkuTop(Integer top, LocalDate start, LocalDate end);

    /**
     * 获取规定时间内的订单量
     * @param start
     * @param end
     * @return
     */
    int getOrderCount(Integer partnerId,Integer innerCode,LocalDateTime start, LocalDateTime end);

    /**
     * 获取规定时间内的销售额
     * @param start
     * @param end
     * @return
     */
    long getOrderAmount(Integer partnerId,Integer innerCode,LocalDateTime start, LocalDateTime end);

    /**
     * 获取售货机商品销量
     */
    List<SkuCollect> getSkuCollect(Integer innerCode,LocalDate start,LocalDate end);
    /**
     * 获取合作商 周/月收入情况
     * @param partnerId
     * @param start
     * @param end
     * @return
     */
    SalesInfo getAmountInfo(Integer partnerId, LocalDateTime start, LocalDateTime end);

    SalesInfo getOrderCountInfo(Integer partnerId, LocalDateTime start, LocalDateTime end);

    /**
     * 获取一定时间内的分成金额
     * @param start
     * @param end
     * @return
     */
    long getTotalBill(LocalDateTime start, LocalDateTime end);
}
